1. Field
This disclosure generally relates to testing software applications for errors. More particularly, the disclosure relates to an interactive debugging session.
2. General Background
Software applications may encounter errors (also called “bugs”) that lead to a number of problems, e.g., incorrect modification of data, system crashes, slower performance, etc. Software developers often attempt to discover as many bugs as possible during the development of the software application to eliminate the presence or at least minimize the number of bugs in the software application prior to release of the software application to the end user. A debugger is a software tool that a programmer utilizes to “debug” a program, i.e., find the bugs in a program. The debugger runs concurrently with the execution of the program and allows the programmer to monitor and control that execution. For instance, the programmer can monitor a particular variable or memory register to see what changes take place during execution. Further, the programmer can insert “break points,” i.e., locations within the source code at which the debugger can pause execution of the program. The programmer can attempt to make sure that the program is executing properly at particular locations. Accordingly, the programmer can then narrow down potential locations in the source code at which bugs are located.
However, errors may occur within a program after its release because of bugs that were not found beforehand. The programmer then needs to further debug the program. Once again, the programmer can utilize the debugger to debug the program. Realistically, the process of debugging may continue well after the release of the program until the program no longer becomes useful or is improved upon.
Accordingly, the process of debugging can be a long an arduous task that often involves teams of programmers, especially with a larger software application. As a result, multiple programmers should ideally be able to debug the same program at the same time. If only one programmer at a time is allowed to make changes to the code, the efficiency of multiple programmers debugging is significantly, if not completely, hampered.
Current systems do not provide a seamless approach that allows multiple programmers to debug the same code at the same time. Additional infrastructure is utilized on a case-by-case basis and often requires specific implementations such as the granting of special system privileges or rebuilding an application. For instance, a privilege is utilized in many systems to allow for a change to an address for an input/output (“I/O”) device for which a debugging session is to occur. A normal programmer does not usually have such a privilege and, therefore, wastes time attempting to obtain such an address change from someone who does have the privilege. Further, the location of the I/O device is usually dependent on the software application. In other words, an I/O device address may be utilized irrespective of the programmer that is utilizing the I/O device at a given time. Therefore, if a first user initiates a debugging session at an I/O device, the debugging session occurs at the I/O device currently on record. If a second user initiates another debugging session at the same time, the additional debugging session will not be successfully established because the I/O device is currently in use by the first user. If the second user initiates a debugging session after the first user completes his or her debugging session, the debugging session is still established at the I/O device of the first user. This may be inconvenient for the second user, who may want to utilize a different I/O device than the first user. The software application may have to be rebuilt to allow for the second user to have a debugging session of his or her own. The utilization of additional infrastructure on a case-by-case basis is an inefficient approach because one programmer may have the resources for a particular infrastructure while another programmer may not have such resources. As a result, current systems are not user friendly, which is an attribute that a debugger should ideally have to allow for easy navigation by programmers.